/* 树状数组
* 1.时间复杂度:
    快速求前缀和 O(logn)
    修改某一个数 O(logn)    

* 2.原理:
    二进制
    (L, R] 区间长度就是每个二进制对应的1的值, 区间就可以表示成(R-lowbit(R)+1, R] 其中lowbit为求R对应二进制最后一位(最低位)"1"所对应的次幂
    C[R]表示以i结尾, 长度为lowbit(R)的 (R-lowbit(R)+1, R]
    C15 = (15 - 2^0, 15] C8 = (8-2^3, 8]

    子节点找父节点:
        依次枚举当前最低为位"1"的之前(高位)的最低位"1", 枚举的所有数即当前节点会影响的父节点

    最后一位"1"之后即全为0, 子区间以递归的思想依次枚举
    e.g. 当末尾有k个0, 即k+1位为最后一位1时, Cx表示以x结尾, 长度是2^k的区间和
         求子区间时, 从低位向高位依次枚举最低位1, 且之前至k+1位全部为1

* 3.code
    lowbit:
        int lowbit(int x)
        {
            return x&-x;
        }

    更改：ax + c 1~x 
            for(int i=x;i<=n;i+=lowbit(i)) tr[i]+=c; tr树状数组哈希表

    查询：
        for(int i=x;i;i-=lowbit(i)) sum+=tr[i];

    

* 本题: 
    新开ans数组，牛按照身高从后向前排序放入ans的下标位置
*/

#pragma GCC optimize("O1,O2,O3,Ofast")
#pragma GCC optimize("no-stack-protector,unroll-loops,fast-math,inline")
#pragma GCC target("avx,avx2,fma")
#pragma GCC target("sse,sse2,sse3,sse4,sse4.1,sse4.2,ssse3")

#include <iostream>
#include <cstring>
#include <algorithm> 
#include <vector>
//#define ONLINE_GUDGE
using namespace std;
#define lowbit(x) (x&-x)
const int N = 1e5 + 10;
int n;
int a[N], tr[N], ans[N]; 
/*
原始数组 
great[i]:a[i]~n之间,一共有多少个数 
lower[i]:1~a[i],一共有多少个数
哈希，tr[i]表示高度为i的节点对应的区间[i - lowbit(i) + 1, i]中的数的个数
*/

inline int ask(int x)
{
    int res = 0;
    for(; x; x -= lowbit(x))
       res+=tr[x];

    return res;
}

inline void add(int x, int c)
{
    for(; x <= n; x += lowbit(x))
        tr[x] += c;
    return;
}

int main()
{

    #ifdef ONLINE_JUDGE
    ios::sync_with_stdio(false);   
	cin.tie(0);
    #else
    freopen("./in.txt","r",stdin);
    #endif

    cin >> n;
    for(int i = 2; i <= n; i++) cin >> a[i];
    for(int i = 1; i <= n; i++)
        add(i, 1);
    
    for(int i = n; i; i--){
        int l = 1, r = n; // 二分找到a[i]+1, 即恰好比a[i]高一个的数的下标
        while(l < r){
            int mid = (l + r) >> 1;
            if(ask(mid) >= a[i] + 1) r = mid;
            else l = mid + 1;
        }
        ans[i] = l; // i应该在l-1的位置, 即在l的前面
        //但是下标从0开始，身高从1开始，此处为l-1，身高输出时需要+1,上下抵消此处可直接=l
        add(l, -1); // l位置已有人占
    }

    for(int i = 1; i <= n; ++i)
        cout << ans[i] << endl;
        
    
    return 0;
}